import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 监理周报控制器 / 监理周报控制器添加
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 附件
 * @param {number} [data.createDepartId] 编制单位
 * @param {string} [data.endDate] 结束日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.fillingDate] 填报日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.id] 监理周报id
 * @param {string} [data.lagReason] 滞后原因
 * @param {number} [data.menuId] 菜单id
 * @param {string} [data.nextWeekWorkPlan] 下周工作计划
 * @param {number} [data.projectId] 项目id
 * @param {string} [data.startDate] 开始日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.status] 推进状态
 * @param {string} [data.thisWeekTargetNode] 本周目标节点
 * @param {string} [data.thisWeekWorkResponsibility] 本周工作内容
 * @param {string} [data.weeklyReportNumber] 周报编号
 * @param {number} [data.weeks] 周数
 * @param {number} [data.year] 年份
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<SupervisionWeeklyReport页面展示实体>}
 * @author 肖玮
 */
export function supervisionWeeklyReportAdd(data, config) {
  return post("/supervisionWeeklyReport/add", data, config);
}

/**
 * 监理周报控制器 / 监理周报控制器删除
 * @param {object} params
 * @param {object} data
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<SupervisionWeeklyReport页面展示实体>}
 * @author 肖玮
 */
export function supervisionWeeklyReportDelete(params, data, config) {
  return postWithQueryParams("/supervisionWeeklyReport/delete", params, data, config);
}

/**
 * 监理周报控制器 / 监理周报控制器查询详情
 * @param {object} params
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<SupervisionWeeklyReport页面展示实体>}
 * @author 肖玮
 */
export function supervisionWeeklyReportDetail(params, config) {
  return get("/supervisionWeeklyReport/detail", params, config);
}

/**
 * 监理周报控制器 / 监理周报控制器导出
 * @param {object} data
 * @param {number} [data.menuId] 菜单id
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.status] 推进状态
 * @param {number} [data.weeks] 周数
 * @param {number} [data.year] 年份
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 肖玮
 */
export function supervisionWeeklyReportExport(data, config) {
  return post("/supervisionWeeklyReport/export", data, config);
}

/**
 * 监理周报控制器 / 监理周报控制器分页查询
 * @param {object} data
 * @param {number} [data.length] 分页大小
 * @param {number} [data.menuId] 菜单id
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.status] 推进状态
 * @param {number} [data.weeks] 周数
 * @param {number} [data.year] 年份
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<SupervisionWeeklyReport页面展示实体>>}
 * @author 肖玮
 */
export function supervisionWeeklyReportPage(data, config) {
  return post("/supervisionWeeklyReport/page", data, config);
}

/**
 * 监理周报控制器 / 监理周报控制器更新
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 附件
 * @param {number} [data.createDepartId] 编制单位
 * @param {string} [data.endDate] 结束日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.fillingDate] 填报日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.id] 监理周报id
 * @param {string} [data.lagReason] 滞后原因
 * @param {number} [data.menuId] 菜单id
 * @param {string} [data.nextWeekWorkPlan] 下周工作计划
 * @param {number} [data.projectId] 项目id
 * @param {string} [data.startDate] 开始日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.status] 推进状态
 * @param {string} [data.thisWeekTargetNode] 本周目标节点
 * @param {string} [data.thisWeekWorkResponsibility] 本周工作内容
 * @param {string} [data.weeklyReportNumber] 周报编号
 * @param {number} [data.weeks] 周数
 * @param {number} [data.year] 年份
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<SupervisionWeeklyReport页面展示实体>}
 * @author 肖玮
 */
export function supervisionWeeklyReportUpdate(data, config) {
  return post("/supervisionWeeklyReport/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} 附件传输实体 附件传输实体
 * @property {string} attUrl 附件url
 * @property {number} directoryId 目录id
 * @property {number} id 附件id
 * @property {string} originalName 原始文件名
 * @description 附件传输实体
 */

/**
 * @typedef {object} SupervisionWeeklyReport页面展示实体 监理周报页面展示实体
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {number} createDepartId 编制单位
 * @property {string} createUserDeptName 编制部门
 * @property {string} createUserRealName 编制人姓名
 * @property {string} endDate 结束日期
 * @property {string} fillingDate 填报日期
 * @property {number} id 监理周报id
 * @property {string} lagReason 滞后原因
 * @property {number} menuId 菜单id
 * @property {string} nextWeekWorkPlan 下周工作计划
 * @property {number} projectId 项目id
 * @property {string} projectName 项目名称
 * @property {string} startDate 开始日期
 * @property {string} status 推进状态
 * @property {string} thisWeekTargetNode 本周目标节点
 * @property {string} thisWeekWorkResponsibility 本周工作内容
 * @property {string} weeklyReportNumber 周报编号
 * @property {number} weeks 周数
 * @property {number} year 年份
 * @description 监理周报页面展示实体
 */
